package arrayybxb

import "fmt"

/*
 * 数组
 */
func TestArray() {
	// var intArr = [5]int{1, 2, 3, 4, 5}
	var intArray = [...]int{1, 2, 3, 4, 5, 6, 7, 8}
	fmt.Printf("类型为%T, 值为%v\n", intArray, intArray) // 类型为[8]int, 值为[1 2 3 4 5 6 7 8]
	fmt.Println("数组的长度:", len(intArray))            // 数组的长度: 8，数组的长度是在数组定义时，就固定了，不受有无元素影响
	ints := intArray[3:5]                           // 输出结果是：[4 5]
	intLastIndex := intArray[3:]                    // 输出结果是：[4 5 6 7 8]
	fmt.Println(ints)
	fmt.Println(intLastIndex)

}

func TestDefineArray() {
	var intArr = [...]int{1: 2, 3: 4} // 为数组中，指定索引上的元素赋值。
	fmt.Println(intArr)               // 打印结果：[0 2 0 4]
}

// k,v遍历数组
func TestForeach() {
	strArr := [...]string{"北京", "南京", "郑州"}
	// 注意:数组的遍历是索引和元素值。
	for index, ele := range strArr {
		fmt.Println(index, ele)
	}
}

// 普通的for循环遍历数组
func TestFor() {
	strArr := [...]string{"北京", "南京", "郑州"}
	for i := 0; i < len(strArr); i++ {
		fmt.Println(strArr[i])
	}
}

// 注意:数组是基本数据类型，所以数组的赋值是值拷贝，而不是引用拷贝。
func TestArrayValue() {
	var arr1 = [3]int{1, 2, 3}
	arr2 := arr1 // 是数组的copy。
	arr2[0] = 3
	fmt.Printf("arr1的值是：%v\n", arr1) // 打印结果：[1 2 3]
	fmt.Printf("arr2的值是：%v\n", arr2) // 打印结果：[3 2 3]
}
